package financier.controler;

import java.util.*;

import financier.model.Devise;
import financier.model.TauxConversion;



public class controler_financier {

	private ArrayList<Devise> devises = new ArrayList<Devise>();

	private ArrayList<TauxConversion> tauxconversions = new ArrayList<TauxConversion>();
	

	public ArrayList<Devise> getDevises() {
		return devises;
	}

	public void setDevises(ArrayList<Devise> devises) {
		this.devises = devises;
	}

	public ArrayList<TauxConversion> getTauxconversions() {
		return tauxconversions;
	}

	public void setTauxconversions(ArrayList<TauxConversion> tauxconversions) {
		this.tauxconversions = tauxconversions;
	}

	/*ajouter une nouvelle devises*/
	public void ajouterDevise(String libelle) {

		if (!this.rechercherDevise(libelle)) { /*
												 * création de la nouvelle
												 * devise
												 */
			Devise temp = new Devise(libelle);
			devises.add(temp);
			System.out.print("la devise a bien été ajoutée");
		} else {
			System.out.print("la devise existe déja");
		}

	}

	/*rechercher une devise*/
	public boolean rechercherDevise(String libelle) {

		boolean exist = false;

		for (Devise d : this.devises) {
			if (d.getNom() == libelle) {
				exist = true;
			}
		}
		return exist;
	}

	/*supprimer une devise*/
	public void supprimer_devise(String libelle) {

		if (this.rechercherDevise(libelle)) {
			for (TauxConversion t : this.tauxconversions) { /*
															 * we begin by the
															 * suppression for
															 * all taux who is
															 * connect to this
															 * devise
															 */
				if ((t.getDeviseAconvertir().nom == libelle)
						|| (t.getDeviseCible().nom == libelle)) {
					this.tauxconversions.remove(t);/* we destroy the taux */
				}
			}

			for (Devise d : this.devises) { /*
											 * we research the devise on the set
											 * of devises
											 */
				if (d.getNom() == libelle) {
					this.devises.remove(d); /* we destroy the devise */
					System.out.print("la devise a bien été supprimée");
				}
			}

		} else {
			System.out.print("la devise n'existe pas");
		}

	}

	/*modifier une devise*/
	public void modifierDevise(String libelle, String Newlibelle) {/*
																	 * used to
																	 * change
																	 * the name
																	 * of one
																	 * existant
																	 * devise
																	 */

		if (this.rechercherDevise(libelle)) {
			for (Devise d : this.devises) { /*
											 * we research the devise on the set
											 * of devises
											 */
				if (d.getNom() == libelle) {
					d.setNom(Newlibelle);
					System.out.print("la devise a bien été modifié");
				}
			}
		}

	}

	/*ajouter un taux*/
	public void ajouterTaux(String cible, String converti, Date date, int valeur) {

		if (!this.recherchertaux(cible, converti, date)) {/*
														 * verification of the
														 * existence of the taux
														 */

			Devise d1 = null, d2 = null;/* devise temporaire */

			if (this.rechercherDevise(cible) && this.rechercherDevise(converti)) {
				for (Devise d : this.devises) { /*
												 * we research the devise on the
												 * set of devises
												 */
					if (d.getNom() == cible) {
						d1 = d;
					}
				}

				for (Devise d : this.devises) { /*
												 * we research the devise on the
												 * set of devises
												 */
					if (d.getNom() == converti) {
						d2 = d;
					}
				}
				/* we create the taux */
				TauxConversion taux = new TauxConversion(d1, d2);

				taux.setDate(date);
				taux.setValue(valeur);
			} else {
				System.out.print("la ou les devises citées n'existe pas");
			}
		} else {
			System.out.print("le taux existe déja à cette date là");
		}
	}

	/*rechercher un taux*/
	public boolean recherchertaux(String cible, String converti, Date date) {

		boolean exist = false;
		for (TauxConversion T : this.tauxconversions) {

			if ((T.getDeviseCible().nom == cible)
					&& (T.getDeviseAconvertir().nom == converti)
					&& (T.getDate() == date)) {
				exist = true;
			}
		}

		return (exist);
	}

	/*supprimer un taux*/
	public void supprimerUnTaux(String cible, String converti, Date date) {

		if (this.recherchertaux(cible, converti, date)) {
			for (TauxConversion T : this.tauxconversions) {

				if ((T.getDeviseCible().nom == cible)
						&& (T.getDeviseAconvertir().nom == converti)
						&& (T.getDate() == date)) {
					this.tauxconversions.remove(T);
					System.out.print("le taux demandé abien été supprimé");
				}
				
				if ((T.getDeviseCible().nom == converti)
						&& (T.getDeviseAconvertir().nom == cible)
						&& (T.getDate() == date)) {
					this.tauxconversions.remove(T);
					System.out.print("le taux demandé abien été supprimé");
				}
			}
		} else {
			System.out.print("le taux demandé n'existe pas");
		}
	}

	/*supprimer tous lestaux qui lient deux devises*/
	public void supprimerTaux(String cible, String converti) {

		for (TauxConversion T : this.tauxconversions) {

			if ((T.getDeviseCible().nom == cible)
					&& (T.getDeviseAconvertir().nom == converti)) {
				this.tauxconversions.remove(T);
			}
			
			if ((T.getDeviseCible().nom == converti)
					&& (T.getDeviseAconvertir().nom == cible)) {
				this.tauxconversions.remove(T);
			}
		}

		System.out.print("le taux a été entierement supprimé");
	}

	/* we can change the value of the element "Taux" */
	public void modifierTaux(String cible, String converti, Date date, int val) {

		if (this.recherchertaux(cible, converti, date)) {
			for (TauxConversion T : this.tauxconversions) {

				if ((T.getDeviseCible().nom == cible)
						&& (T.getDeviseAconvertir().nom == converti)
						&& (T.getDate() == date)) {
					T.setValue(val);
				}
			}
		} else {
			System.out.print("le taux demandé n'existe pas");
		}
	}
	
	
	public void conversionDeDevise( String cible, String converti, Date d , double montant){
		
		if (this.recherchertaux(cible, converti, d)) {
			for (TauxConversion T : this.tauxconversions) {

				if ((T.getDeviseCible().nom == cible)
						&& (T.getDeviseAconvertir().nom == converti)
						&& (T.getDate() == d)) {
					montant = montant*T.getValue();/*on multiplie le montant par le taux */
				}
			}
		} else {
			System.out.print("il n'existe pas de taux enregistré entre ces deux devises");
		}	
	}
	
}
